home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / extras / programm / gemfsc20 / gemfsc20.lzh / GEMFUNCS / GRFMOUSE.C < prev    next >
C/C++ Source or Header  |  1993-02-01  |  2KB  |  63 lines

  1. /**************************************************************************
  2.  *
  3.  *************************************************************************/
  4.  
  5. #include "gemfintl.h"
  6.  
  7. #undef graf_mouse    /* undo remapping, we have to call The Real Thing. */
  8.  
  9. /*
  10.  * when returning the prior shape, we can't return the ARROW shape as
  11.  * zero, because that looks like a failure of graf_mouse().  instead,
  12.  * we return GRF_MSALTARROW.  when we're asked to set the shape to GRF_MSALTARROW,
  13.  * we translate it back to ARROW before passing it to GEM.
  14.  */
  15.  
  16. /*
  17.  * GEM starts programs up with BUSYBEE as the initial shape...
  18.  */
  19.  
  20. static short  lastshape = BUSYBEE;
  21. static void *lastform = NULL;
  22.  
  23. short grf_mouse(shape, pform)
  24.     register short    shape;
  25.     register void *pform;
  26. {
  27.     register short retshape;
  28.  
  29.     retshape = lastshape;
  30.  
  31.     if (shape <= USER_DEF) {    /* if it's not just M_ON or M_OFF... */
  32.  
  33.         if (shape == GRF_MSINQUIRE) {        /* if the caller wants inquiry */
  34.             if (pform != NULL) {            /* without change, return the  */
  35.                 *(void **)pform = lastform; /* form pointer (if we were    */
  36.             }                                /* given somewhere to return   */
  37.             return retshape;                /* it to) & return lastshape.  */
  38.  
  39.         } else {
  40.  
  41.             lastshape = (shape == ARROW) ? GRF_MSALTARROW : shape;
  42.  
  43.             if (shape == USER_DEF) {        /* if we're changing to a      */
  44.                 if (pform == NULL) {        /* user-defined shape, and       */
  45.                     pform = lastform;        /* weren't given a pointer to  */
  46.                 } else {                    /* it, restore the last udef   */
  47.                     lastform = pform;        /* shape, else remember this   */
  48.                 }                            /* as the last udef shape.       */
  49.  
  50.             } else if (shape == GRF_MSALTARROW) {/* if we were given GRF_MSALTARROW  */
  51.                 shape = ARROW;                /* to set, change it back to   */
  52.             }                                /* the normal ARROW.           */
  53.         }
  54.     }
  55.  
  56.     if (0 == graf_mouse(shape, pform)) {    /* do it.  if it fails, change */
  57.         retshape = 0;                        /* our return value to indicate*/
  58.     }                                        /* failure.                    */
  59.  
  60.     return retshape;    /* return prior mouse shape. */
  61. }
  62.  
  63.